home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / Tool Chest / Interfaces / UniversalInterfaces 1.0 / CIncludes / SANE.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-18  |  5.3 KB  |  230 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        SANE.h
  3.  
  4.     Copyright:    © 1983-1993 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    System 7.1 for ETO #11
  8.     Created:    Tuesday, March 30, 1993 18:00
  9.  
  10. */
  11.  
  12. #ifndef __SANE__
  13. #define __SANE__
  14.  
  15. #ifndef __TYPES__
  16. #include <Types.h>
  17. #endif
  18.  
  19. #ifndef __MATH__
  20. #include <Math.h>
  21. #endif
  22.  
  23. #ifdef mc68881
  24.  
  25. /* specific to the MC68881 SANE library */
  26.  
  27. #define INEXACT ((exception)(8))
  28. #define DIVBYZERO ((exception)(16))
  29. #define UNDERFLOW ((exception)(32))
  30. #define OVERFLOW ((exception)(64))
  31. #define INVALID ((exception)(128))
  32. #define CURINEX1 ((exception)(256))
  33. #define CURINEX2 ((exception)(512))
  34. #define CURDIVBYZERO ((exception)(1024))
  35. #define CURUNDERFLOW ((exception)(2048))
  36. #define CUROVERFLOW ((exception)(4096))
  37. #define CUROPERROR ((exception)(8192))
  38. #define CURSIGNAN ((exception)(16384))
  39. #define CURBSONUNOR ((exception)(32768))
  40.  
  41. #else
  42.  
  43. /* specific to the software SANE library */
  44.  
  45. #define INVALID ((exception)(1))
  46. #define UNDERFLOW ((exception)(2))
  47. #define OVERFLOW ((exception)(4))
  48. #define DIVBYZERO ((exception)(8))
  49. #define INEXACT ((exception)(16))
  50. #define IEEEDEFAULTENV ((environment)(0))    /*IEEE-default floating-point environment*/
  51.  
  52. #endif                                        /* mc68881 */
  53.  
  54. /* The common interface to the SANE library */
  55.  
  56. /* Decimal Representation Constants */
  57.  
  58. #define SIGDIGLEN 20                        /* significant decimal digits */
  59. #define DECSTROUTLEN 80                     /* max length for dec2str output */
  60.  
  61. /* Decimal Formatting Styles */
  62.  
  63. #define FLOATDECIMAL ((char)(0))
  64. #define FIXEDDECIMAL ((char)(1))
  65.  
  66. /* Ordering Relations */
  67.  
  68. #define GREATERTHAN ((relop)(0))
  69. #define LESSTHAN ((relop)(1))
  70. #define EQUALTO ((relop)(2))
  71. #define UNORDERED ((relop)(3))
  72.  
  73. /* Inquiry Classes */
  74.  
  75. #define SNAN ((numclass)(0))
  76. #define QNAN ((numclass)(1))
  77. #define INFINITE ((numclass)(2))
  78. #define ZERONUM ((numclass)(3))
  79. #define NORMALNUM ((numclass)(4))
  80. #define DENORMALNUM ((numclass)(5))
  81.  
  82. /* Rounding Directions */
  83.  
  84. #define TONEAREST ((rounddir)(0))
  85. #define UPWARD ((rounddir)(1))
  86. #define DOWNWARD ((rounddir)(2))
  87. #define TOWARDZERO ((rounddir)(3))
  88.  
  89. /* Rounding Precisions */
  90.  
  91. #define EXTPRECISION ((roundpre)(0))
  92. #define DBLPRECISION ((roundpre)(1))
  93. #define FLOATPRECISION ((roundpre)(2))
  94.  
  95. #ifdef mc68881
  96.  
  97. typedef long exception;
  98.  
  99. struct environment {
  100.     long FPCR;
  101.     long FPSR;
  102. };
  103.  
  104. typedef struct environment environment;
  105.  
  106. extern environment IEEEDEFAULTENV;
  107.  
  108. struct trapvector {
  109.     void (*unordered)();
  110.     void (*inexact)();
  111.     void (*divbyzero)();
  112.     void (*underflow)();
  113.     void (*operror)();
  114.     void (*overflow)();
  115.     void (*signan)();
  116. };
  117.  
  118. typedef struct trapvector trapvector;
  119. #else
  120.  
  121. typedef short exception;
  122. typedef short environment;
  123. typedef struct {short w[6];} extended96;
  124.  
  125. struct mischaltinfo {
  126.     unsigned short haltexceptions;
  127.     unsigned short pendingCCR;
  128.     long pendingD0;
  129. };
  130.  
  131. typedef struct mischaltinfo mischaltinfo;
  132. typedef pascal void (*haltvector)(mischaltinfo *misc, void *src2, void *src, void *dst, short opcode);
  133. #endif
  134.  
  135. typedef short relop;                        /* relational operator */
  136. typedef short numclass;                     /* inquiry class */
  137. typedef short rounddir;                     /* rounding direction */
  138. typedef short roundpre;                     /* rounding precision */
  139.  
  140. struct decimal {
  141.     char sgn;                                /*sign 0 for +, 1 for -*/
  142.     char unused;
  143.     short exp;                                /*decimal exponent*/
  144.     struct{
  145.         unsigned char length;
  146.         unsigned char text[SIGDIGLEN];        /*significant digits */
  147.         unsigned char unused;
  148.         }sig;
  149. };
  150.  
  151. typedef struct decimal decimal;
  152. struct decform {
  153.     char style;                             /*FLOATDECIMAL or FIXEDDECIMAL*/
  154.     char unused;
  155.     short digits;
  156. };
  157.  
  158. typedef struct decform decform;
  159. #ifdef __cplusplus
  160. extern "C" {
  161. #endif
  162.  
  163. #ifdef mc68881
  164.  
  165. struct trapvector gettrapvector(void);
  166. void settrapvector(const trapvector *v);
  167. void x96tox80(const extended *x,extended80 *x80);
  168. void x80tox96(const extended80 *x80,extended *x);
  169.  
  170. #else
  171.  
  172. haltvector gethaltvector(void); 
  173. void sethaltvector(haltvector v);
  174. void x96tox80(const extended96 *x96,extended *x);
  175. void x80tox96(const extended *x,extended96 *x96);
  176.  
  177. #endif
  178.  
  179. void num2dec(const decform *f,extended x,decimal *d);
  180. extended dec2num(const decimal *d); 
  181. void dec2str(const decform *f,const decimal *d,char *s);
  182. void str2dec(const char *s,short *ix,decimal *d,short *vp); 
  183. extended remainder(extended x,extended y,short *quo);
  184. extended rint(extended x);
  185. extended scalb(short n,extended x); 
  186. extended logb(extended x);
  187. extended copysign(extended x,extended y);
  188. extended nextfloat(extended x,extended y);
  189. extended nextdouble(extended x,extended y); 
  190. extended nextextended(extended x,extended y);
  191. extended log2(extended x);
  192. extended log1(extended x);
  193. extended exp2(extended x);
  194. extended exp1(extended x);
  195.  
  196. #define power(x,y) pow(x,y)
  197.  
  198. extended ipower(extended x,short i);
  199. extended compound(extended r,extended n);
  200. extended annuity(extended r,extended n);
  201. extended randomx(extended *x);
  202. numclass classfloat(extended x);
  203. numclass classdouble(extended x);
  204. numclass classcomp(extended x); 
  205. numclass classextended(extended x); 
  206. long signnum(extended x);
  207. void setexception(exception e,long s);
  208. long testexception(exception e);
  209. void sethalt(exception e,long s);
  210. long testhalt(exception e); 
  211. void setround(rounddir r);
  212. rounddir getround(void);
  213. void setprecision(roundpre p);
  214. roundpre getprecision(void);
  215. void setenvironment(environment e); 
  216. void getenvironment(environment *e);
  217. void procentry(environment *e); 
  218. void procexit(environment e);
  219. relop relation(extended x,extended y);
  220. extended nan(unsigned char c);
  221.  
  222. #define inf() __inf()
  223.  
  224. extended pi(void);
  225. #ifdef __cplusplus
  226. }
  227. #endif
  228.  
  229. #endif
  230.